package com.cskaoyan.javase.oop3._1interface._4case;

import com.cskaoyan.javase.oop3._1interface._3exercise.Demo;
import com.cskaoyan.javase.oop3._1interface._4case.operation.impl.IGoodsOperationImpl;

/**
 * 某电商系统后台，前端程序员需要后端程序员，提供接口来完成库存的管理，展示页面。
 * 假如前后端商量好，要求：
 *      1.展示全部商品（goods）页面时，将仅装有商品对象的数组返回，前端不提供任何数据。
 *      2.新增商品时，前端提供商品各种参数，后端需要校验ID唯一性，然后将对象插入数组，返回插入结果。
 *          简化：
 *              前端直接给我们传来一个商品对象
 *              然后要求插入数据源对象数组
 *              最终返回插入结果
 *              分析插入结果：
 *                  1.插入成功，表示找到一个null位置，插入
 *                  2.插入失败
 *                      插入的数组满了，插入失败。没有null的位置了
 *                      id已存在，直接插入失败
 *
 *      3.删除商品时，前端提供商品ID，后端将该商品删除后，返回删除删除结果。（成功返回true，找不到该ID的商品返回false）
 *              分析:
 *                  前端提供id,要求在数据源中删除该id的商品
 *                  结果:
 *                      1.存在这个id对应的商品,删除成功
 *                      2.不存在这个id对应的商品,删除失败.
 * ....
 * @since 17:45
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Test {
    public static void main(String[] args) {
        IGoodsOperationImpl operation = new IGoodsOperationImpl();
        Goods[] allRealGoods = operation.getAllRealGoods();
        printGoodsArr(allRealGoods);
        System.out.println("---------------------");
        switch (operation.insertGoods(new Goods("罗技G304鼠标", "罗技", 300, 6))) {
            case 0:
                System.out.println("插入成功!");
                printGoodsArr(operation.getAllRealGoods());
                break;
            case 1:
                System.out.println("插入数组,数组满了!");
                printGoodsArr(operation.getAllRealGoods());
                break;
            case 2:
                System.out.println("插入失败,id重复了!");
                printGoodsArr(operation.getAllRealGoods());
                break;
        }
        System.out.println("---------------");
        System.out.println("开始删除元素");
        if (operation.deleteGoods(10)) {
            // 删除成功
            System.out.println("删除成功!");
            printGoodsArr(operation.getAllRealGoods());
        }else {
            System.out.println("删除失败,没有找到目标元素!");
            printGoodsArr(operation.getAllRealGoods());
        }
    }


    public static void printGoodsArr(Goods[] arr) {
        for (Goods good : arr) {
            good.print();
        }
    }
}

interface A {
    Object test();

    default void test2() {
    }
}

interface B extends A {
    /*
        重写父接口抽象方法
            只有在父接口的方法返回值类型是父类类型时
            子接口中可以将抽象方法返回值类型重写为子类类型
            其余地方都不可变。
     */
    @Override
    Demo test();

    @Override
    default void test2() {
        System.out.println();
    }
}
